/**
 * 409. 最长回文串
 *
 * 【简单】
 *
 * 给定一个包含大写字母和小写字母的字符串 s ，返回 通过这些字母构造成的 最长的回文串 。
 * 在构造过程中，请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
 *
 * 示例 1:
 * 输入:s = "abccccdd"
 * 输出:7
 * 解释:
 * 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
 *
 * 示例 2:
 * 输入:s = "a"
 * 输出:1
 *
 * 示例 3：
 * 输入:s = "aaaaaccc"
 * 输出:7
 */

/**
 * 解题思路:
  · 回文串的特点是都是成双成对的（除了奇数回文串中心节点之外，其它字符都是成双成对的）
	· 现在给我们一个字符串，让我们用这个字符串来构建回文串
	· 关键在于计算有多少对相同的字符，（如果除了成对的字符外还有剩余的字符，可以再加1个做为奇数回文串的中心节点，但是仅仅只能加1个，因为只有1个中心节点）

 */
function longestPalindrome(s: string): number {
	const set = new Set() // new Map()
	let count = 0
	for (let c of s) {
		if (set.has(c)) {
			set.delete(c)
			count += 2
		} else {
			set.add(c) // set.set(c, c)
		}
	}

	return count + (set.size ? 1 : 0)
}
